Expand description
An implementation of a permeuted multiply with carry random number generator. Details about the design see: https://tom-kaitchuck.medium.com/designing-a-new-prng-1c4ffd27124d
This library provides two generators:
Mwc256XXA64
: A Lag-3 64bit MWC generator with two xors and an addition applied to the output. It has an output size of 64bits, and a state size of 256bits. This algorithm is fastest on 64 bit architectures.Mwc256XXA64
: A Lag-3 32bit MWC generator with two xors and an addition applied to the output. It has an output size of 32bits, and a state size of 128bits. This algorithm is fastest on 32 bit architectures.
§Usage
[dependencies]
pcg-mwq = "0.2.1"
§Typename Nomenclature
The name describes the algorithm.
- First Mwc stands for
Multiply with carry
this is the base generator type. - This is followed by the state sise in bits.
- Third the output permutatuon which is used. Where
X
refers to ‘xor’ andA
refers to addition. - Fourth is the output size in bits
§How to Use
The simple generators work like the other Rng’s from the rand
crate.
You can create a prng as follows
ⓘ
extern crate pcg_mwc;
extern crate rand;
use rand::{Rng, SeedableRng};
use pcg_mwc::Mwc256XXA64;
fn main() {
let mut rand = Mwc256XXA64::from_entropy();
let x : u32 = rand.gen();
}
Structs§
- Mwc128XX
A32 - A PCG random number generator (MWC X A 128/32 variant).
- Mwc256XX
A64 - A PCG random number generator (MWC X A 256/64 variant).